﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sinacor.Infra.Service.Security
{
	/// <summary>
	/// Classe contendo as informações do usuário.
	/// </summary>
	public class User
	{
		private int _id;
		private string _name;
		private string _login;
		private string _password;
		private bool _isActive;
		private DateTime? _expirationDate;
		private string _email;

		public User()
		{ }

		/// <summary>
		/// Id do usuário
		/// </summary>
		public int Id
		{
			get { return _id; }
			set { _id = value; }
		}

		/// <summary>
		/// Nome do usuário
		/// </summary>
		public string Name
		{
			get { return _name; }
			set { _name = value; }
		}

		/// <summary>
		/// Login do usuário.
		/// </summary>
		public string Login
		{
			get { return _login; }
			set { _login = value; }
		}

		/// <summary>
		/// Senha
		/// </summary>
		public string Password
		{
			get
			{
				if (IsPasswordEncrypted())
					return DataCryptography.EncryptDecrypt(_password);
				else
					return _password;
			}
			set { _password = value; }
		}

		/// <summary>
		/// Data de expiração da conta do usuário.
		/// </summary>
		public DateTime? ExpirationDate
		{
			get { return _expirationDate; }
			set { _expirationDate = value; }
		}

		/// <summary>
		/// Email do usuário.
		/// </summary>
		public string Email
		{
			get { return _email; }
			set { _email = value; }
		}

		/// <summary>
		/// Indica se o usuário esta ativo
		/// </summary>
		public bool IsActive
		{
			get { return _isActive; }
			set { _isActive = value; }
		}

		/// <summary>
		/// Verifica se o Password do banco de dados esta criptografado.
		/// </summary>
		/// <returns>True or False</returns>
		private bool IsPasswordEncrypted()
		{
			Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Sinacor\Infra.Data\Config");
			return (key.GetValue("IsEncrypted").ToString() == "1");
		}

	}
}
